﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Drawing;

using DevExpress.XtraGrid;
using DevExpress.XtraEditors;
using DevExpress.XtraReports.UI;

using prjKQXS_DLL;
using prjKQXS_DLL.Truyen_thong;
using prjKQXS_Report.Ve_so;

namespace prjKQXS_UI
{
    public partial class frmTruyenThong_Nhan : XtraForm
    {
        #region VAR ===============================================================================
        clsTruyenThong cls = new clsTruyenThong();


        /// <summary>
        /// Biến này tự động được gán khi chọn đơn vị ở lueDonVi.
        /// Giá trị là '%' nếu cọn "Tất cả", hoặc là mã đơn vị tương ứng với dòng đã chọn.
        /// </summary>
        char MaDV;


        /// <summary>
        /// TenDV (Tên đơn vị) tự động được gán khi chọn cán bộ từ lueDonVi
        /// </summary>
        string TenDV;


        /// <summary>
        /// Biến này tự động được gán là -1 (nếu chọn tất cả cán bộ) hoặc là id của cán bộ tương ứng khi chọn từ lueCanBo.
        /// </summary>
        int DMCanBoID;


        /// <summary>
        /// Tên cán bộ tự động gán khi chọn từ lueCanBo
        /// </summary>
        string TenCB;


        /// <summary>
        /// Biến này tự động được gán khi chọn từ deNgay
        /// </summary>
        DateTime Ngay;

        bool run_loadData;
        #endregion VAR ============================================================================


        #region Form ==============================================================================
        public frmTruyenThong_Nhan()
        {
            InitializeComponent();
            ucDonVi1.lueDonVi.EditValueChanged += new EventHandler(lueDonVi_EditValueChanged);
            ucCanBo1.lueCanBo.EditValueChanged += new EventHandler(lueCanBo_EditValueChanged);

            Color backcolor = gvDonVi.Appearance.FocusedRow.BackColor;
            gvDonVi.Appearance.FocusedCell.BackColor = backcolor;

            cls.OnAction += new clsTruyenThong.OnActionHandler(cls_OnAction);
            cls.OnError += new clsTruyenThong.OnErrorHandler(cls_OnError);
        }

        private void frmTruyenThong_Nhan_Load(object sender, EventArgs e)
        {
            run_loadData = false;
            {
                deNgay.DateTime = DateTime.Now;
            }
            run_loadData = true;

            loadLueDonVi();
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.F2)
            {
                cbtnSua.Checked = !cbtnSua.Checked;
            }
            else if (keyData == Keys.F12)
            {
                this.Close();
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }
        #endregion Form ===========================================================================


        #region gv ================================================================================
        private void gvDonVi_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            DataRow dr = gvDonVi.GetDataRow(e.RowHandle);
            if (dr != null)
            {
                if (dr["ID"] == DBNull.Value)
                {
                    //Thực hiện insert
                    object TruyenThongID = cls.Insert(dr, Ngay);
                    gvDonVi.SetRowCellValue(e.RowHandle, "ID", TruyenThongID);
                }
                else
                {
                    //Thực hiện update
                    cls.Update(dr);
                }
            }

            //countTT_B_LT();
        }

        private void gcDonVi_Resize(object sender, EventArgs e)
        {
            //grcDonVi.Width = (gcDonVi.Width / 2) - 5;
            //grcCanBo.Width = (gcDonVi.Width / 2) - 5;
            //grcCanBo.Left = ((gcDonVi.Width + gcDonVi.Left) / 2) + 10;
        }
        #endregion gv =============================================================================


        #region Button ============================================================================
        private void cbtnSua_CheckedChanged(object sender, EventArgs e)
        {
            if (cbtnSua.Checked)
            {
                cbtnSua.Text = "F2. &Khóa";
                enableControl(true);
                gvDonVi.OptionsBehavior.Editable = true;
            }
            else
            {
                cbtnSua.Text = "F2. &Sửa";
                gvDonVi.OptionsBehavior.Editable = false;
                enableControl(false);
            }
        }

        private void sbtnXoa_Click(object sender, EventArgs e)
        {
            if (chkKhoiPhuc.Checked)
            {
                if (gcDonVi.DataSource != null && ((DataTable)gcDonVi.DataSource).Rows.Count > 0)
                {
                    if (clsCommon.MsgBox("Ở chế độ khôi phục sẽ bị xóa hoàn toàn khỏi hệ thống, bạn có chắc chắn xóa dòng này ?", 2) == System.Windows.Forms.DialogResult.Yes)
                    {
                        cls.Delete(gvDonVi.GetFocusedDataRow()["ID"].ToString(), false);
                    }
                }
            }
            else
            {
                if (gcDonVi.DataSource != null && ((DataTable)gcDonVi.DataSource).Rows.Count > 0)
                {
                    if (clsCommon.MsgBox("Bạn có chắc chắn muốn xóa dòng này ?", 2) == System.Windows.Forms.DialogResult.Yes)
                    {
                        cls.Delete(gvDonVi.GetFocusedDataRow()["ID"].ToString(), true);
                    }
                }
            }

            loadData_GridView();
        }

        private void sbtnXoaall_Click(object sender, EventArgs e)
        {
            if (DMCanBoID == -1)
            {
                clsCommon.MsgBox("Bạn cần chọn cán bộ trước khi xóa ", 0);
            }
            else
            {
                if (chkKhoiPhuc.Checked)
                {
                    if (gcDonVi.DataSource != null && ((DataTable)gcDonVi.DataSource).Rows.Count > 0)
                    {
                        string s = "Ở chế độ khôi phục vé trong ngày của cán bộ " + ucCanBo1.lueCanBo.GetColumnValue("Ten_DT").ToString() +
                            " sẽ bị xóa hoàn toàn khỏi hệ thống, bạn có chắc chắn xóa dòng này ?";
                        if (clsCommon.MsgBox(s, 2) == System.Windows.Forms.DialogResult.Yes)
                        {
                            cls.DeleteAll(DMCanBoID, Ngay, false);
                        }
                    }
                }
                else
                {
                    if (gcDonVi.DataSource != null && ((DataTable)gcDonVi.DataSource).Rows.Count > 0)
                    {
                        if (clsCommon.MsgBox("Bạn có chắc chắn muốn xóa vé của cán bộ " +
                            ucCanBo1.lueCanBo.GetColumnValue("Ten_DT").ToString() + " này ?", 2) == System.Windows.Forms.DialogResult.Yes)
                        {
                            cls.DeleteAll(DMCanBoID, Ngay, true);
                        }
                    }
                }

                loadData_GridView();
            }
        }

        private void chkKhoiPhuc_CheckedChanged(object sender, EventArgs e)
        {
            if (chkKhoiPhuc.Checked)
            {
                sbtnKhoiPhuc.Tag = "KP";
                sbtnKhoiPhuc.Text = "&Khôi phục";
            }
            sbtnIn.Enabled = !chkKhoiPhuc.Checked;
            sbtnKhoiPhuc.Enabled = chkKhoiPhuc.Checked;
            sbtnKPAll.Enabled = chkKhoiPhuc.Checked;
            chkNhap.Enabled = !chkKhoiPhuc.Checked;
            loadData_GridView();
        }

        private void sbtnKhoiPhuc_Click(object sender, EventArgs e)
        {
            if (gcDonVi.DataSource != null && ((DataTable)gcDonVi.DataSource).Rows.Count > 0)
            {
                if (clsCommon.MsgBox("Khôi phục dòng này?", 2) == System.Windows.Forms.DialogResult.Yes)
                {
                    cls.Restore((int)gvDonVi.GetFocusedDataRow()["ID"]);
                    loadData_GridView();
                }
            }
        }

        private void sbtnKPAll_Click(object sender, EventArgs e)
        {
            if (DMCanBoID == -1)
            {
                clsCommon.MsgBox("Bạn cần chọn cán bộ trước khi khôi phục lại ", 0);
            }
            else
            {
                if (gcDonVi.DataSource != null && ((DataTable)gcDonVi.DataSource).Rows.Count > 0)
                {
                    if (clsCommon.MsgBox("Bạn có chắc chắn muốn khôi phục vé của cán bộ " +
                        ucCanBo1.lueCanBo.GetColumnValue("Ten_DT").ToString() + " này ?", 2) == System.Windows.Forms.DialogResult.Yes)
                    {
                        cls.RestoreAll(DMCanBoID, Ngay);

                        loadData_GridView();
                    }
                }
            }
        }

        //Dùng cho sbtnIn và sbtnInDS2
        private void sbtnIn_Click(object sender, EventArgs e)
        {
            if (DMCanBoID != -1)
            {
                rptBangNhanVe rpt = new rptBangNhanVe();
                rpt.dtSource = loadData("rptBangNhanVe");
                rpt.Parameters["pMaDV"].Value = MaDV.ToString().Trim();
                rpt.Parameters["pTenDV"].Value = TenDV;
                rpt.Parameters["pDMCanBoID"].Value = DMCanBoID;
                rpt.Parameters["pTenCB"].Value = TenCB;
                rpt.Parameters["pTuNgay"].Value = Ngay;
                rpt.Parameters["pDenNgay"].Value = Ngay;
                rpt.ShowRibbonPreviewDialog();
            }
            else clsCommon.MsgBox("Bạn cần chọn cán bộ trước khi in!", 0);
        }

        //Dùng cho nút sbtnLoc và sbtnLoc2
        private void sbtnLoc_Click(object sender, EventArgs e)
        {
            if (sbtnLoc.Tag.Equals("LOC"))
            {
                sbtnLoc.Tag = "BL";
                sbtnLoc.Text = "&Bỏ tìm";
                gvDonVi.OptionsView.ShowAutoFilterRow = true;
            }
            else
            {
                gvDonVi.OptionsView.ShowAutoFilterRow = false;
                sbtnLoc.Tag = "LOC";
                sbtnLoc.Text = "&Tìm";
                gvDonVi.ClearColumnsFilter();
            }
        }

        //Dùng cho nút sbtnDong và sbtnDong2
        private void sbtnDong_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        #endregion Button =========================================================================


        #region Control ===========================================================================
        private void lueDonVi_EditValueChanged(object sender, EventArgs e)
        {
            string madv = ucDonVi1.lueDonVi.GetColumnValue("Ma_DT").ToString().Trim();
            MaDV = madv == "TC" ? '%' : Convert.ToChar(madv);
            TenDV = ucDonVi1.lueDonVi.GetColumnValue("Ten_DT").ToString().Trim();
            ucCanBo1.lueCanBo.Enabled = !(ucDonVi1.lueDonVi.ItemIndex == 0);
            loadLueCanBo();
            if (ucCanBo1.lueCanBo.ItemIndex == 0) lueCanBo_EditValueChanged(null, null);
            else ucCanBo1.lueCanBo.ItemIndex = 0;
        }

        private void lueCanBo_EditValueChanged(object sender, EventArgs e)
        {
            DMCanBoID = Convert.ToInt32(ucCanBo1.lueCanBo.GetColumnValue("ID").ToString().Trim());
            TenCB = ucCanBo1.lueCanBo.GetColumnValue("Ten_DT").ToString().Trim();
            loadData_GridView();

            sbtnIn.Enabled = !chkNhap.Checked && !chkKhoiPhuc.Checked && cbtnSua.Checked && DMCanBoID != -1;
        }

        private void deNgay_EditValueChanged(object sender, EventArgs e)
        {
            Ngay = deNgay.DateTime.Date;
            if (run_loadData) loadData_GridView();
        }

        private void chkNhap_CheckedChanged(object sender, EventArgs e)
        {
            //sbtnIn.Enabled = !chkNhap.Checked;
            sbtnXoa.Enabled = !chkNhap.Checked;
            sbtnXoaAll.Enabled = !chkNhap.Checked;
            chkKhoiPhuc.Enabled = !chkNhap.Checked;

            loadData_GridView();
        }

        private void chkNhap_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            if (Ngay > DateTime.Now.Date)
            {
                clsCommon.MsgBox("Không được phép nhập trước ngày hiện tại. Vui lòng chọn lại ngày nhập.", 5);
                e.Cancel = true;
                return;
            }

            if (MaDV == '%')
            {
                clsCommon.MsgBox("Bạn cần chọn đơn vị trước khi nhập!", 0);
                e.Cancel = true;
                return;
            }
            else if (DMCanBoID == -1)
            {
                clsCommon.MsgBox("Bạn cần chọn cán bộ trước khi nhập!", 0);
                e.Cancel = true;
            }
        }
        #endregion Control ========================================================================


        #region Sub and Function ==================================================================
        #region cls event --------------------------------------------
        private void cls_OnAction(SqlException e)
        {
            cls_OnError(e);
        }

        private void cls_OnError(Exception e)
        {
            XtraMessageBox.Show("Một lỗi chưa được xử lý đã xảy ra. Chi tiết lỗi: \n" + e.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
            this.Close();
        }
        #endregion ---------------------------------------------------
 
        private void loadLueDonVi()
        {
            ucDonVi1.lueDonVi.Properties.DataSource = clsCommon.load_lueDonVi();
            ucDonVi1.lueDonVi.ItemIndex = 0;
        }

        private void loadLueCanBo()
        {
            ucCanBo1.lueCanBo.Properties.DataSource = clsCommon.load_lueCanBo(MaDV);
        }

        private DataTable loadData(string formName)
        {
            return cls.loadData(Ngay, MaDV.ToString(), DMCanBoID, !chkKhoiPhuc.Checked, formName);
        }

        private void loadData_GridView()
        {
            gcDonVi.DataSource = loadData(this.Name);
            Tinhtong();
        }


        private void enableControl(bool state)
        {
            sbtnIn.Enabled = state && DMCanBoID != -1;
            chkNhap.Enabled = state;
            sbtnXoa.Enabled = state;
            sbtnXoaAll.Enabled = state;
            chkKhoiPhuc.Enabled = state;
        }

        private void Tinhtong()
        {
            int tongsoluongtt = 0;

            DataTable dt = (DataTable)gcDonVi.DataSource;

            if (dt != null)
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        if (row["SLVeNhan"] != null
                            && row["SLVeNhan"].ToString().Trim() != ""
                            && (decimal)clsCommon.Parse(row["SLVeNhan"].ToString().Trim(), 3) != 0)
                        {
                            tongsoluongtt++;
                        }
                    }
                }

            lblTongTT.Text = tongsoluongtt.ToString();
        }                   
        #endregion Sub and Function ===============================================================

        private void deNgay_Leave(object sender, EventArgs e)
        {

        }
    }
}